
import configureStore from "stores";
const currentMenuPermission= configureStore.store.getState().main.currentMenuPermission;

// 判断当前的key是否在给定的列表中
function isCurrenKeyInMenuKeyList (keyList) {
  let currentActiveKey= configureStore.store.getState().main.currentMenuPermission.currentActiveKey
  let currentMenuKey= currentActiveKey && currentActiveKey[0]
  if(!currentMenuKey){
    return false
  }
  if(keyList.includes(currentMenuKey)){
    return true
  }
  return false
}
// 拼装为要处理的url
function assembleUrlParams (query, key,  value) {
  if(query){
    if(query.indexOf(key) === -1){
      return `${key}=${value}&${query}`
    }
    return query
  }else{
    return `${key}=${value}`
  }
}
/**
 * 部门属性相关 start
 */
// 需要对部门组件进行特殊处理的菜单
const departmentMenuKeyList= [
  'value-list', // 值列表
  'department-management', // 部门组
  'cost-center', // 成本中心
  'cost-center-assignment', // 成本中心项分配
  'person-group', // 人员组
  'person-manage', // 员工
  'budget-balance-solution', // 余额查询方案
  'role-permission-setting', // 角色授权
  'process-monitoring-platform', // 流程监控平台
  'department-management', // 部门管理
  'contract-type-define', // 合同类型定义
]
// 需要对部门组件进行特殊处理的接口
const departmentApiList= [
  // 值列表、 成本中心、角色授权、员工、部门管理
  '/api/departments/root/v2',
  '/api/department/user/keyword',
  '/api/department/child/[^\/]+',
  // 部门组
  '/api/departments/root/v2',
  '/api/department/tenant/keyword/v2',
  // 人员组、余额查询方案、角色授权（授权查询）、流程监控平台
  '/api/DepartmentGroup/selectDept/enabled',
  // 员工
  '/api/DepartmentGroup/selectDept/deptCode/name',
]
const departmentApiRegList= departmentApiList.map(item=>{
  return new RegExp(`${item}/?$`, 'i')
})
// 判断当前的url是否在给定的urlList中
function isUrlInDepartmentApiList (url) {
  return departmentApiRegList.some(item=>{
    return item.test(url)
  })
}

/**
 * 处理部门接口上是否需要加虚拟部门
 * params url 当前接口的api地址
 * @return url 拼装完的接口地址
 * */
function handleDepartmentApi (url) {
  if(!isCurrenKeyInMenuKeyList(departmentMenuKeyList)){
    return url
  }
  const urlAry= url.split('?')
  const path= urlAry[0]
  const params= urlAry[1]
  if(!isUrlInDepartmentApiList(path)){
    return url
  }
  urlAry[1]= assembleUrlParams(urlAry[1], `needVirtual`, `true`)
  return urlAry.join('?')
}
/**
 * 部门属性相关 end
 */

/**
 * roleType相关 start
 * */

const noNeedTenantRoleMenuKeyList=[
  "customer-company-maintenance",
  "supplier-maintain-company",
  "function-profile"
];

const needTenantRoleMenuKeyList=[
  'role-permission-setting', // 角色授权
  'role-menu-setting'// 角色维护
];

function handleTenantRoleType ({url, params, forceTenantMode, method, needTenant}) {
  //在某些菜单下，集团模式时不传 roleType=TENANT（这是之前的代码，后面没问题会直接删掉2019.12.05）
  // let specialMenus = ["customer-info-maintenance", "supplier-maintain"];
  // let bool = specialMenus.some(item => window.location.href.indexOf(item) !== -1);
  // let tenantMode = configureStore.store.getState().main.tenantMode;
  // let user = configureStore.store.getState().login.user;
  //   if (tenantMode || forceTenantMode) {
  //     if (url.indexOf('?') >= 0) {
  //       if (url.indexOf('roleType=TENANT') < 0 && !params.roleType) {
  //         url += '&roleType=TENANT'
  //       }
  //     } else {
  //       if (method === 'get' || method === 'delete') {
  //         if (!params.roleType) {
  //           params.roleType = 'TENANT';
  //         }
  //       } else {
  //         url += '?roleType=TENANT'
  //       }
  //     }
  //   }
  let result={
    url,
    params
  }
  // 不需要roleType的
  if(isCurrenKeyInMenuKeyList(noNeedTenantRoleMenuKeyList)){
    return result
  }
  let tenantMode = configureStore.store.getState().main.tenantMode;
  const setParam=()=>{
    const urlAry= url.split('?')
    urlAry[1]= assembleUrlParams(urlAry[1], 'roleType', 'TENANT')
    result.url= urlAry.join('?')
  }
  // 需要roleType的
  if(isCurrenKeyInMenuKeyList(needTenantRoleMenuKeyList) || forceTenantMode || (tenantMode && needTenant)){
    if((method === 'get' || method === 'delete') && params){
      if(!params.roleType){
        setParam()
      }
    }else{
      setParam()
    }
  }
  return result
}
/**
 * roleType相关 end
 * */


export default {
  /*
  *
  * @return {url, params}
  * */
  beforeSend({url, params, forceTenantMode, method,  needTenant = true}){
    // 处理部门属性
    url= handleDepartmentApi(url)
    // 处理roleType
    const result= handleTenantRoleType({url, params, forceTenantMode, method, needTenant})
    return result
  }
}
